package 笔试;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class 输出螺旋矩阵 {
    public static void main(String[] args) {
        /*
[[ 1,  2,  3, 4,  x],
  [12, 13, 14, 5, x],
  [11, 16, 15, 6, x],
  [10,  9,  8, 7, x]]

1 2 3 4 5 6 .... 16
         */

        //第一层直接输出
        //判断是否长度是否大于1，否则输出最后一个
        //最后一层，逆序输出全部
        //返回上一层，判断是否大于1，否则输出第一个
        //到第一层时，返回第二层，判断是否大于1，顺序输出，更改此层为第一层
        //递归调用
        int[][] x = new int[4][4];
        x[0] = new int[]{1, 2,3,4};
        x[1] = new int[]{12,13,14,5};
        x[2] = new int[]{11,16,15,6};
        x[3] = new int[]{10,9,8,7};
        //从第0层开始，第三层结束
        System.out.println(sout(x,new StringBuilder(),0, x.length-1));
    }
    public static String sout(int[][] arr,StringBuilder stringBuilder,int x, int y){
        for (int i = x; i < y+1; i++) {
            //如果为第一层则输出全部
            if (i == x){
                for (int j = 0; j < arr[x].length; j++) {
                    stringBuilder.append(arr[x][j]);
                    stringBuilder.append(" ");
                }
            }
            //到第二层，如果不是最后一层则输出最后一个
            if (i < y-1){
                //i+1可能会下标越界
                stringBuilder.append(arr[i+1][arr[i].length-1]);
                stringBuilder.append(" ");
            }
            //到最后一层，逆序输出全部
            if (i == y){
                for (int j = arr[y].length-1; j >= 0; j--) {
                    stringBuilder.append(arr[y][j]);
                    stringBuilder.append(" ");
                }
            }
        }
        //第一次结束，第一层下标后移，最后一层下标前移
        x++;
        y--;
        if (x>y){
            return stringBuilder.toString();
        }
        for (int i = y; i >= x; i--) {
            //到第三层，如果不是最后一层则输出第一个
            if (i > 1&& i<x){
                //i+1可能会下标越界
                stringBuilder.append(arr[i+1][arr[i].length-1]);
                stringBuilder.append(" ");
            }
        }


        return stringBuilder.toString();
    }

}
